package cn.stylefeng.guns.modular.transport.model.result;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

import java.util.List;
import java.util.Map;

/**
 * MapTrackResult 类用于封装地图轨迹查询结果。
 */
@Data
public class MapTrackResult {

    /**
     * 错误码，用于指示请求是否成功。
     */
    @JsonProperty("errcode")
    private int errCode;

    /**
     * 错误消息，用于提供错误码的详细描述。
     */
    @JsonProperty("errmsg")
    private String errMsg;

    @JsonProperty("errdetail")
    private String errdetail;

    /**
     * 返回的数据集合，包含轨迹信息和其他相关数据。
     */
    @JsonProperty("data")
    private Tracks data;

    /**
     * Tracks 类用于封装一组轨迹信息。
     */
    @Data
    public static class Tracks {

        /**
         * 轨迹列表，包含多个轨迹信息。
         */
        @JsonProperty("tracks")
        private List<Track> tracks;

        /**
         * 轨迹的总数。
         */
        @JsonProperty("counts")
        private int counts;

        /**
         * 参数的降级状态信息。
         */
        @JsonProperty("degradedParams")
        private DegradedParams degradedParams;

        /**
         * DegradedParams 类用于表示参数降级状态。
         */
        @Data
        public static class DegradedParams {

            /**
             * 降级状态码。
             * 0 表示未降级生效中；
             * 1 表示已降级不生效。
             */
            @JsonProperty("threshold")
            private int threshold;
        }

        /**
         * Track 类用于封装单个轨迹的信息。
         */
        @Data
        public static class Track {

            /**
             * 轨迹的起点坐标。
             */
            @JsonProperty("startPoint")
            private Point startPoint;

            /**
             * 轨迹的终点坐标。
             */
            @JsonProperty("endPoint")
            private Point endPoint;

            /**
             * 轨迹ID。
             */
            @JsonProperty("trid")
            private int trId;

            /**
             * 轨迹名称，开发者未上传时返回系统随机命名。
             */
            @JsonProperty("trname")
            private String trname;

            /**
             * 轨迹长度，单位：米。
             */
            @JsonProperty("distance")
            private double distance;

            /**
             * 轨迹持续时间，单位：毫秒。
             */
            @JsonProperty("time")
            private long time;

            /**
             * 轨迹点的总数。
             */
            @JsonProperty("counts")
            private int pointsCount;

            /**
             * 轨迹中的各个点信息。
             */
            @JsonProperty("points")
            private List<Point> points;

            /**
             * Point 类用于封装单个轨迹点的信息。
             */
            @Data
            public static class Point {

                /**
                 * 轨迹点的经纬度坐标，格式为“经度,纬度”。
                 */
                @JsonProperty("location")
                private String location;

                /**
                 * 最后一次定位的时间，单位：毫秒。
                 */
                @JsonProperty("locatetime")
                private long locaTime;

                /**
                 * 定位精度。
                 */
                @JsonProperty("accuracy")
                private double accuracy;

                /**
                 * 方向，取值范围：[0,359]，0代表正北方，采用顺时针方向取值。
                 */
                @JsonProperty("direction")
                private double direction;

                /**
                 * 速度，单位：千米/小时。
                 */
                @JsonProperty("speed")
                private double speed;

                /**
                 * 高度，单位：米。
                 */
                @JsonProperty("height")
                private double height;

                /**
                 * 自定义字段内容。
                 */
                @JsonProperty("props")
                private Map<String, String> props;
            }
        }
    }
}